package com.zjsru.oneDay;

import java.util.HashMap;
import java.util.Map;

/**
 * 在线选举
 * <p>
 * 输入：
 * ["TopVotedCandidate", "q", "q", "q", "q", "q", "q"]
 * [[[0, 1, 1, 0, 0, 1, 0], [0, 5, 10, 15, 20, 25, 30]], [3], [12], [25], [15], [24], [8]]
 * 输出：
 * [null, 0, 1, 1, 0, 0, 1]
 * <p>
 * 解释：
 * TopVotedCandidate topVotedCandidate = new TopVotedCandidate([0, 1, 1, 0, 0, 1, 0], [0, 5, 10, 15, 20, 25, 30]);
 * topVotedCandidate.q(3); // 返回 0 ，在时刻 3 ，票数分布为 [0] ，编号为 0 的候选人领先。
 * topVotedCandidate.q(12); // 返回 1 ，在时刻 12 ，票数分布为 [0,1,1] ，编号为 1 的候选人领先。
 * topVotedCandidate.q(25); // 返回 1 ，在时刻 25 ，票数分布为 [0,1,1,0,0,1] ，编号为 1 的候选人领先。（在平局的情况下，1 是最近获得投票的候选人）。
 * topVotedCandidate.q(15); // 返回 0
 * topVotedCandidate.q(24); // 返回 0
 * topVotedCandidate.q(8); // 返回 1
 */
public class votedCandidate {
    Map<Integer, Integer> map;
    int[] numbers;

    public void TovotedCandidate(int[] persons, int[] times) {
        numbers = new int[persons.length];
        map = new HashMap<>();
        int maxNumber = 0;
        for (int i = 0; i < times.length; i++) {
            numbers[persons[i]]++;
            if (i == 0) {
                map.put(times[i], persons[i]);
                maxNumber = numbers[persons[i]];
                continue;
            }
            if (numbers[persons[i]] >= maxNumber) {
                maxNumber = numbers[persons[i]];
                map.put(times[i], persons[i]);
            } else {
                map.put(times[i], map.get(times[i - 1]));
            }
        }
    }

    public int q(int t) {
        while (map.get(t) == null) {
            t--;
        }
        return map.get(t);
    }

}
